// 公用检验的插件

 const result = require('./yichang-results')

class charm {
    constructor(ctx, ...obj) {
        this.ctx = ctx
        this.obj = obj // 接收不固定参数的数组字符串
    }
    // 效验前端传来的值是否为空
    validation() {
        // indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。(空格也算) 没有返回 -1
        let bvt = this.obj.indexOf(undefined)
        if (bvt !== -1) {
            throw new result('参数填写错误', 400)
        }
    }
    // 手机号验证码  moblie 错误状态 num obj数组的第几项
    Phone(moblie, num){
        let phone = /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1589]))\d{8}$/
        if (!phone.test(this.obj[num])) {
            throw new result(moblie, 202) // 状态码返回
        }
    }
    // 密码验证
    Password(pass,num){
        let reg = /^\S*(?=\S{6,})(?=\S*\d)(?=\S*[a-z])\S*$/
        if (!reg.test(this.obj[num])) {
            throw new result(pass, 202) // 状态码返回
        }
    }
    // 校验空数组
    Arrfun(list,num){
        if (JSON.parse(this.obj[num]).length ==0 ) {
            throw new result(list, 202)
        }
    }
    // 空格符校验
    blank(list){
        let vbn = this.obj.filter(item =>{
            return item.split(" ").join("").length === 0
        })
        let bvc = this.obj.indexOf(vbn[0])
        if (bvc != -1) {
            throw new result(list[bvc], 202)
        }
    }
    // 校验为空
    parameter(list) {
        // indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。(空格也算) 没有返回 -1
        let bvc = this.obj.indexOf('')
        if (bvc !== -1) {
            throw new result(list[bvc], 202)
        }
    }
}

// 子类继承父类result校验

// 注册校验
class regcheck extends charm {
    start() { // start 方法调用父类的方法
        super.validation()
        super.Phone('请填写正确的手机号码', 0) 
        super.Password('请输入6到20位的数字和字母组成的密码',1)
    }
    
}
// 商家店铺信息校验
class shopinfor extends charm {
    start() { // start 方法调用父类的方法
        let arr = ['请输入店铺名称','请输入店铺地址','请上传店铺logo']
        super.validation()
        super.parameter(arr) 
        super.blank(arr) 
        super.Arrfun('请上传店铺logo',2)
    }
    
}
// 类目上传校验
class catecheck extends charm {
    start() { // start 方法调用父类的方法
        let arr = ['请输入菜品类目','请输入店铺地址','请上传店铺logo']
        super.validation()
        super.parameter(arr) 
        super.blank(arr) 
    }
    
}

// 菜品数据校验
class putoncheck extends charm {
    start() { // start 方法调用父类的方法
        let arr = ['请选择菜品类目','请输入商品名称','请输入商品价格','请选择商品单位','请选择商品图片']
        super.validation()
        super.parameter(arr) 
        super.blank(arr) 
    }
    
}

//添加桌号
class postcode extends charm{
	start(){
		let arr = ['桌号不能为空']
        super.validation()
		super.parameter(arr)
		super.blank(arr)
	}
}
module.exports = { regcheck, shopinfor, catecheck,putoncheck,postcode }